home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / DDJ0992.ARJ / DUNHAM.LS6 < prev    next >
Text File  |  1992-04-20  |  4KB  |  204 lines

  1. /* Listing #6: test.c  program to demonstrate crash tracebacks */
  2.  
  3. #define DEBUGPRINT         /* we don't want debug info */
  4. #ifdef DEBUGPRINT
  5. # define DBPRINT(s) printf s
  6. #else
  7. # define DBPRINT(s) 
  8. #endif
  9.  
  10. void tst_segv(),tst_bus();
  11. void tst_fltdiv(), tst_intdiv();
  12. void tst_lv4(),tst_lv3(),tst_lv2(),tst_lv1();
  13.  
  14. /*----------------------------------------*/
  15. void tst_segv()              /* cause a segmentation fault */
  16. {
  17.   char *ptr;
  18.   DBPRINT((" in segv\n"));
  19.   ptr=0;
  20.   *ptr=4;
  21. }
  22.  
  23. void tst_fltdiv()            /* cause a floating divide by zero */
  24. {
  25.   char text[16];
  26.   float e,d,f;
  27. /*-------------------------------*/
  28.   strcpy(text,"fltdiv");
  29.   DBPRINT((" in fltdiv \n"));
  30.   f= 127.0;
  31.   e= 0.0;
  32.   d= 126.0;
  33.   f=d/e;
  34. }
  35.  
  36. void tst_intdiv()            /* cause an integer divide by zero */
  37. {
  38.   int a,b,c;
  39.   DBPRINT((" in intdiv \n"));
  40.   c=12;
  41.   a=1;
  42.   b=0;
  43.   c=a/b;
  44. }
  45.  
  46. void tst_lv4(paramtext)      /* 4 levels deep */
  47. char *paramtext;
  48. {
  49.   long l4;
  50.   char text[16];
  51.   l4= 0xcafefade;
  52.   strcpy(text,"level4");
  53.   tst_segv(); 
  54. }
  55.  
  56. void tst_lv3(paramtext)      /* 3 levels deep */
  57. char *paramtext;
  58. {
  59.   long l3;
  60.   char text[16];
  61.   l3= 0xdeafdead;
  62.   strcpy(text,"level3");
  63.   tst_lv4("call 4");
  64. }
  65.  
  66. void tst_lv2(paramtext)      /* 2 levels deep */
  67. char *paramtext;
  68. {
  69.   long l2;
  70.   char text[17];
  71.   l2= 0xfeedface;
  72.   strcpy(text,"level2");
  73.   tst_lv3("call 3");
  74. }
  75.  
  76. void tst_lv1()               /* 1 level deep */
  77. {
  78.   long l1, *lptr;
  79.   char text[16];
  80.   l1= 0xdeedfade;
  81.   lptr= &l1;
  82.   strcpy(text,"level1");
  83.   tst_lv2("call 2");
  84. }
  85.  
  86. void tst_bus()               /* cause a bus error */
  87. {
  88.   short s1;
  89.   long address;
  90.   short *ptr;
  91.   unsigned long uu;
  92.   char text[16];
  93.   strcpy(text,"level1");
  94.   s1=0x00ef;
  95.   ptr= &s1;
  96.   address= (long)ptr;
  97.   uu= *(long *)address;
  98.   printf("bus error: address=%X uu=%X \n",address,uu);
  99. }
  100.  
  101. void tst_param(ii,ss,ff,dd,cc,uc,us,ul,ui)  /* dump parameters */
  102. int ii;
  103. short ss;
  104. float ff;
  105. double dd;
  106. char cc;
  107. unsigned char uc;
  108. unsigned short us;
  109. unsigned long ul;
  110. unsigned int ui;
  111. {
  112.   tst_segv();
  113. }
  114.  
  115. void tst_param2(ii,ss,ff,dd,cc,uc,us,ul,ui,ptr)  /* dump parameters */
  116. int *ii;                                         /* passed by pointer */
  117. short *ss;
  118. float *ff;
  119. double *dd;
  120. char *cc;
  121. unsigned char *uc;
  122. unsigned short *us;
  123. unsigned long *ul;
  124. unsigned int *ui;
  125. char *ptr;
  126. {
  127.   tst_segv();
  128. }
  129.  
  130. main(argc,argv)
  131. int argc;
  132. char *argv[];
  133. {
  134.   int ii;
  135.   char cc;
  136.   long ll;
  137.   short ss;
  138.   float ff;
  139.   double dd;
  140.   unsigned char uc;
  141.   unsigned short us;
  142.   unsigned long ul;
  143.   unsigned int ui;
  144.   int iarr[12];
  145.   float farr[8];
  146.   char text[21];
  147.   int random;
  148. /*--------------------*/
  149.   
  150.   trb_signalinit(argc,argv);    /* install our signal handler */
  151.  
  152.   ll=0xfeeadded;     /* easy to recognize hex values */
  153.   strcpy(text,"traceback");
  154.  
  155.   for(ii=0;ii<12;ii++) iarr[ii]=ii;  /* see if we dump arrays ok */
  156.   for(ii=0,ff=100;ii<8;ii++,ff++) farr[ii]=ff;
  157.  
  158.   ii=12;      /* miscellaneous values */
  159.   cc='q';
  160.   ss=24;
  161.   ff=256.0;
  162.   dd=512.0;
  163.   uc= 65;
  164.   us= -4;
  165.   ul= -8;
  166.   ui= -16;
  167.  
  168. /* get a random number */
  169.   random= time(0);
  170.   random= random & 7;
  171.  
  172.   printf("random= %d \n",random);
  173.   switch (random)
  174.     {case 1:    tst_bus();    /* bus error */
  175.         break;
  176.  
  177.      case 2:    tst_segv();    /* segmentation fault */ 
  178.         break;
  179.  
  180.      case 3:    tst_intdiv();            /* integer divide */
  181.         break;
  182.  
  183.      case 4:    tst_fltdiv(ll,ss,ff,dd);    /* float divide */
  184.         break;
  185.  
  186.      case 5:    tst_lv1();        /* several call levels */
  187.         break;
  188.  
  189.      case 6:    tst_param(ii,ss,ff,dd,cc,uc,us,ul,ui);
  190.         break;            /* pass parameters by value */
  191.  
  192.      case 7:    tst_param2(&ii,&ss,&ff,&dd,&cc,&uc,&us,&ul,&ui,text);
  193.         break;            /* pass parameters by pointers */
  194.  
  195.      default:    break;
  196.     } /* end of switch */
  197.         
  198.     exit(0);
  199. }
  200.  
  201.  
  202.  
  203.  
  204.